package com.flyqiu.form.api.rule;

import com.alibaba.fastjson2.JSONObject;
import com.flyqiu.form.common.enums.FlyQiuFormDataAction;
import com.flyqiu.form.model.entity.FlyQiuTableConfig;

public interface FlyQiuDataPropValidate {
    /**
     * 排序序号 序号越小验证优先级越高
     *
     * @return
     */
    default int getSort() {
        return 999;
    }

    /**
     * 数据验证
     *
     * @param config   表单配置
     * @param formData 表单数据
     * @param data     数据
     * @param action   动作
     */
    default void dataValidate(FlyQiuTableConfig config, JSONObject formData, Object data, FlyQiuFormDataAction action) {
        if (action == null) return;
        switch (action) {
            case ADD:
                dataAddValidate(config, formData, data);
                break;
            case UPDATE:
                dataUpdateValidate(config, formData, data);
                break;
            default:
                break;
        }
    }

    /**
     * 新增时数据验证
     *
     * @param formData 表单数据
     * @param data     当前数据
     */
    default void dataAddValidate(FlyQiuTableConfig config, JSONObject formData, Object data) {

    }

    /**
     * 修改时数据验证
     *
     * @param formData 表单数据
     * @param data     当前数据
     */
    default void dataUpdateValidate(FlyQiuTableConfig config, JSONObject formData, Object data) {

    }

    /**
     * 数据验证
     *
     * @param context 表单配置
     * @param valData 数据 当前数据
     * @param action  动作操作动作 {@link FlyQiuFormDataAction}
     */

    default void dataValidate(FlyQiuValidateContext context, Object valData, FlyQiuFormDataAction action) {
        if (action == null) return;
        switch (action) {
            case ADD:
                dataAddValidate(context, valData, action);
                break;
            case UPDATE:
                dataUpdateValidate(context, valData, action);
                break;
            default:
                break;
        }
    }

    /**
     * 新增时数据验证
     *
     * @param context
     * @param valData
     * @param action
     */
    default void dataAddValidate(FlyQiuValidateContext context, Object valData, FlyQiuFormDataAction action) {

    }


    /**
     * 修改时数据验证
     *
     * @param context
     * @param valData
     * @param action
     */
    default void dataUpdateValidate(FlyQiuValidateContext context, Object valData, FlyQiuFormDataAction action) {

    }
}
